M-Bus Configuration Wizard Downlink
Manual for configuring and managing Acrios Systems M-Bus Converters setup using Configuration Wizard via downlink commands.
Introduction
M-Bus (Meter Bus) is a standard industrial bus for remote meter reading – typically used with water meters, gas meters, heat meters, or electricity meters. The M-Bus converter acts as a gateway: it reads data from devices connected to the M-Bus and forwards it wirelessly (e.g. via LoRaWAN or NB-IoT).
A downlink is a message sent from the server to the device (downstream direction). Through downlinks, the converter can be remotely parametrized – changing its behavior, adding or removing devices, triggering a scan, or restarting the converter – without physical access to the hardware.
This manual provides a comprehensive reference for configuring and managing Acrios Systems M-Bus Converters setup using Configuration Wizard via downlink commands.
LoRaWAN vs NB-IoT difference
Every command in this manual shares a common structure and can be split into two parts. The first part is the command number and the second part is the payload. The command number specifies the command to execute and the payload contains command specific parameters.
LoRaWAN
LoRaWAN has a native fPort field in every frame. The command number is carried in this field, and the payload contains only the command data itself.
fPort: 01
Payload: [command data ...]
NB-IoT
NB-IoT does not have an equivalent application-layer port field. Instead, the command number is encoded as the first byte of the payload – referred to as the command byte. The rest of the payload follows immediately after.
Payload: [command byte (1B)] [command data ...]
General Information
- Little-endian format: All multi-byte data is in little endian format.
- Error response
0xEE: If a downlink message is incorrectly formatted (e.g., wrong content or length), the converter will take no action and respond with0xEE(standard error code). - Payload length limit: If the total length of response payload exceeds the maximum allowed (e.g., 51 bytes in LoRaWAN), the converter will discard excess data.
01 - Reset & Set Or Reset Addresses
This command is used to wipe existing addresses or overwrite them with a new list.
Payload Details
Port / command byte: 1 / 0x01
Response: 0xF6 <DEVICE_INFO_1><DEVICE_INFO_2>...<DEVICE_INFO_7> - list of all known devices, where <DEVICE_INFO_X> consists of:
- Primary Address (1 byte)
- Secondary Address (4 bytes)
- Baudrate (2 bytes)
Example:
|-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baudrate V Secondary address Baudrate V Secondary address Baudrate
V Primary address Primary address Primary address
Command byte
Mode A: Erase all addresses
Erases all addresses (both primary and secondary). Converter stops reading devices and sends a message indicating no devices are present. Converter remains open to receiving downlink messages.
⚠ WARNING: If "wait for response" is disabled and all addresses are erased, the converter will become unresponsive and unable to resume operation without a manual configuration. In this state, the converter will not read any devices and will not recover automatically.
Payload: 0x01
Payload length: 1 byte
Mode B: Erase all and set new addresses
Which addressing will be used depends on the value of primary address.
Address selection based on Primary Address:
- 0x00–0xFC: Use Primary Address
- 0xFD: Use Secondary Address
- 0xFE: Treated as broadcast; converter still uses Secondary Address
- 0xFF: Undefined; converter uses Secondary Address
Placeholders for unknown addresses:
- Primary: 0xFD
- Secondary: 0x00000000
Payload: <DEVICE_INFO_1><DEVICE_INFO_2>...<DEVICE_INFO_7>
Payload length: N × 7 bytes, where N is number of devices
02 - Set Configuration
This command is used to configure wake-up period, beacon usage, scan modes and VIF/DIF filters.
Payload Details
Port / command byte: 2 / 0x02
Payload:
| Byte | Size | Name | Description |
|---|---|---|---|
| 1 | 1 | Wake-up period (days) | 0x00–0xFF (0–255) |
| 2 | 1 | Wake-up period (hours) | 0x00–0xFF (0–255) |
| 3 | 1 | Wake-up period (minutes) | 0x00–0xFF (0–255) |
| 4 | 1 | useBeacon | 0x00 = disabled, 0x01 = enabled |
| 5 | 1 | OnStartup Scan Mode | 0x00 = off, 0x01 = only new devices, 0x02 = add new to current |
| 6–21 | 16 | VIF/DIF filter indexes (1–16) | See below |
| 22–N | N | VIF/DIF filter definitions | See below |
VIF/DIF filter indexes: 0x00–0xFF (0xFF means no filter applied; else index into bytes 22–N)
- Each index refers to a corresponding VIF/DIF filter block defined after byte 22.
- Index value '1' refers to the first VIF/DIF filter block, '2' to the second, and so on.
- Example:
0x01 0x02 0xFF ...→ Device 1 uses VIF/DIF Filter 1, Device 2 uses VIF/DIF Filter 2, Device 3 uses no filter
VIF/DIF Filters Format:
-
Number of filters (1 byte)
-
For each filter:
- Filter length (1 byte)
- Filter content (length bytes)
-
Example:
|-----VIF/DIF Filter 1------| |-----VIF/DIF Filter 2------|
0x01 0x03 0xFA 0x53 0x11 0x02 0x02 0xCC 0xBB 0x02 0xAD 0x1B
| | |------------| | | |-------| | |-------|
| | V | | V | V
| V filter | V filter V filter
V filter length V filter length filter length
Number of filters Number of filters
⚠ WARNING: If any filter is cut off due to max payload size, it (and any remaining filters) will be discarded.
Response:
- Command byte: 0xFE (1 byte)
- Entire configuration sent back (N bytes)
03 - Request Configuration
Requests the full configuration.
Payload details
Port / command byte: 3 / 0x03
Payload: 0x01
Payload length: 1 byte
Response: Same format as command 02
04 - Request MBus Scan
Look for new MBus devices.
Payload details
Port / command byte: 4 / 0x04
Payload:
0x01(keep previously configured devices) or0x02(discard previously configured devices)- Followed by N baudrates (2 bytes each)
Response:
- Command byte: 0xF6
- N × 7 bytes: Discovered device addresses (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))
- If only primary responded → secondary = 0x00000000
- If only secondary responded → primary = 0xFD
Example:
|-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baud V Secondary address Baud V Secondary address Baud
V Primary address Primary address Primary address
Command byte
NOTE: The 3rd device used secondary address only (primary = 0xFD)
05 - Request Addresses
Retrieves list of all known addresses.
Payload details
Port / command byte: 5 / 0x05
Payload: 0x01
Response:
- Command byte: 0xF6
- N × 7 bytes: List of all known devices, each 7 bytes: (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))
Example:
|-----------1st Device-----------| |-----------2nd Device-----------| |-----------3rd Device-----------|
0xF6 0xAA 0x12 0x34 0x56 0x78 0x60 0x09 0x19 0xFE 0xDC 0xBA 0x98 0x60 0x09 0xFD 0xFE 0xDC 0xBA 0x98 0x60 0x09
| | |-----------------| |-------| | |-----------------| |-------| | |-----------------| |-------|
| | V V | V V | V V
| V Secondary address Baud V Secondary address Baud V Secondary address Baud
V Primary address Primary address Primary address
Command byte
06 - Request Version
Requests version of LUA snippets.
Payload details
Port / command byte: 6 / 0x06
Payload: 0x01
Description: Version is a series of numbers that act as indexes into our templates database. Using these indexes in order, the system rebuilds the main code structure by selecting specific predefined code snippets. This process recreates the core program logic but leaves out variable settings like addresses and communication parameters and so on.
Response:
- Command byte: 0xFA
- Script version (length is variable)
07 - Request Reset
Restarts the converter.
Payload details
Port / command byte: 6 / 0x06
Payload: 0x01
Response: None
15 - Set Initial Delay
Sets initial M-Bus read delay (in milliseconds). Resets dynamic delay algorithm. Delay will adjust over time dynamically.
Payload details
Port / command byte: 15 / 0x0F
Payload: Value from 1000 to 65535 (2 bytes)
Response:
- Command byte: 0xFA
- Current delay of each device (2 bytes per device)
Example:
|----- Initial delay times of... -----|
|1st dev| |2nd dev| |3rd dev| |4th dev|
0xFA 0x57 0x04 0xAE 0x08 0x05 0x0D 0x5C 0x11
16 - Request Initial Delay
Requests current read delay of each device.
Payload details
Port / command byte: 16 / 0x10
Payload: 0x01
Response:
- Command byte: 0xFA
- Current delay of each device (2 bytes per device)
Example:
|-----|Initial delay times of...|-----|
|1st dev| |2nd dev| |3rd dev| |4th dev|
0xFA 0x57 0x04 0xAE 0x08 0x05 0x0D 0x5C 0x11
25 - Custom Lua Command
Remote execution of Lua scripts.
Payload details
Port / command byte: 25 / 0x17
Payload:
- Lua script as ASCII
- Payload length depends on script size
Response: None
30 - Add Device
Adds a new device to the current list without removing any existing ones.
Payload details
Port / command byte: 30 / 0x1E
Payload:
| Byte | Size | Name | Description |
|---|---|---|---|
| 1 | 1 | Primary Address | 0x00–0xFE (0–254); determines which address type is used |
| 2–5 | 4 | Secondary Address | 0x00000000–0xFFFFFFFF; 32-bit unique ID |
| 6–7 | 2 | Baudrate | 0x0000–0xFFFF; communication speed in baud |
Address type selection is based on the Primary Address value:
- 0x00–0xFC → Use Primary Address
- 0xFD → Use Secondary Address
- 0xFE → Broadcast (not allowed); converter will use Secondary Address instead
Placeholders for unknown addresses:
- Primary: 0xFD
- Secondary: 0x00000000
If a device with same addresses already exists:
- It will NOT be added again.
- No error will be returned.
Response:
- Command byte: 0xF6
- N × 7 bytes: List of all known devices (Primary Address (1 byte), Secondary Address (4 bytes), Baudrate (2 bytes))